/*** Created Time: 2022年5月13日 21:48:30 ***/
/*** Author: Eric                        ***/

#ifndef _MY_ASSERT_H_
#define _MY_ASSERT_H_

// 参考assert.h源码

// 断言失败调用函数
void assertion_failure(char *exp, char *file, char *base, int line);


// 断言宏
// #exp表示将exp字符串化
// GCC下，__FILE__指示本行语句所在源文件的文件名
//        __BASE_FILE__指示入口点函数所在文件
//        __LINE__指示本行语句所在源文件中的位置信息
#define assert(exp) \
    if(exp)         \
        ;           \
    else            \
        assertion_failure(#exp, __FILE__, __BASE_FILE__, __LINE__)


// 终止系统运行函数
void panic(const char *fmt, ...);

#endif